Traditional caching algorithms in large storage architectures (e.g., MegaRAID) inherently require region locks to avoid data inconsistency. The same buffers are often re-used for all read/writes for given strip/stripe. Hence it is required to make sure that no two Direct Memory Access (DMA) operations act on the same buffers. This effectively creates a need for serialization to make sure that no two Input/Output (I/O) commands act on the same buffer at the same time.
Unfortunately, existing caching algorithms have high latency. Another drawback to existing caching algorithms is that they are highly coupled and very difficult to decouple for purposes of achieving hardware automation.